package 行为型设计模式.观察者模式.demo;

import java.util.ArrayList;
import java.util.List;

/**
 * 事件发布者--事件源
 * 核心：事件监听机制的实现
 * 发布事件：当事件发生时，发布者负责通知所有感兴趣的观察者
 * 管理观察者，并在事件发生时通知它们
 *
 * @Author lf
 * @Date 3/17/2024
 */
public class EventPublisher {
    private List<EventListener> listeners = new ArrayList<>();

    public void addListener(EventListener listener) {
        listeners.add(listener);
    }

    public void removeListener(EventListener listener) {
        listeners.remove(listener);
    }

    public void notifyListeners(MessageEvent event) {
        for (EventListener listener : listeners) {
            listener.update(event);
        }
    }

    public void publishEvent(String message) {
        MessageEvent event = new MessageEvent(message);
        notifyListeners(event);
    }
}
